Next.jsのチュートリアルでブログアプリを作ってみた
チュートリアルはいくつかの章に分けてあり、各章のタイトルは以下のようになっています。
-
- Next.jsアプリの作成
- ページ遷移
- Assets, Metadata, CSS
- 事前レンダリングとデータ取得
- 動的ルーティング
- APIルーティング
- デプロイ
Next.jsアプリの作成
ページ遷移
- pages/index.js → http://localhost:3000/
- pages/posts/first-post.js → http://localhost:3000/posts/first-post
また<Link>を使ったページ遷移を行い、<a>を使ったページ遷移との違いのほか、コードの分割とプリフェッチの仕様についても説明文を読んで学びます。
Assets, Metadata, CSS
- 静的アセットの追加方法
- メタデータの追加
- scriptの読み込み
- CSSの追加
用意された画像を/publicフォルダに配置し、<Image>を使って画像を最適化した上で表示します。
<Head>を使ってtitleタグを追加し、タブのタイトルが変更されているか確認します。
例としてFaceBook SDKのスクリプトを追加します。<Script>を使うことで、読み込み動作を調整してスクリプトの追加を最適化することができます。
css modulesを使うことでクラス名が衝突することを防ぎながら、スタイルを追加します。コンポーネント単位のスタイルや、グローバルのスタイルの当て方をそれぞれ実践します。そのほか、clsxを使ったスタイルの切り替えや、PostCssを使ったCSSのコンパイル、Sassの導入方法など触りの部分のみですが説明が書かれています。
事前レンダリングとデータ取得
次に、ブログの内容をアプリからフェッチしてレンダリングする方法を実践します。 posts/以下に配置したマークダウン形式のファイル(.md)を読み込み、getStaticPropsを使って静的生成を行います。 もしサーバーサイドレンダリングを行いたい場合はgetServerSidePropsを使います。
動的ルート
- http://localhost:3000/posts/ssg-ssrにアクセス
- http://localhost:3000/posts/pre-renderingにアクセス
→posts/ssg-ssr.mdをフェッチして投稿ページをレンダリング
→posts/pre-rendering.mdをフェッチして投稿ページをレンダリング
Next.jsでは、[id].jsのようにファイル名が[]で挟まれている場合、動的ルートが行われます。 チュートリアルでは以下の操作を行い動的ルートを実装します。
- pages/[id].jsを作成
- getStaticPaths関数からidとして利用可能な文字列の配列を返す
- getStaticPropsでパスに含まれるidを受け取り、フェッチとレンダリングを行う
この章まででブログアプリは完成です。デプロイはしていませんが、デモで公開されているブログアプリと同じものが作成できました。
APIルート
{"text":"Hello"}
感想
簡単なチュートリアルでしたが、実用性のありそうなブログサイトが作れて楽しかったです。自分は普段Reactばかり触っていてNext.jsは初めてでした。 Reactと文法はほとんど同じですが、
- <Link>や<Image>などNext.jsに組み込まれたコンポーネント
- SSRやSSGなどサーバーサイドでのプリレンダリング機能
- APIのエンドポイントを作成できる点
など違う部分も多くありました。チュートリアルだけではまだ理解しきれていない部分も多くあるので、もう少し触ってみようと思います。